package com.ruoyi.system.utils.modbus;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.MrDevice;
import com.serotonin.modbus4j.BasicProcessImage;

import java.util.List;

/**
 * 寄存器及线圈
 */
public class Register {

    public static BasicProcessImage getModscanProcessImage(int slaveId, List<MrDevice> mrDevices) {
        /* 初始化过程影像区 */
        BasicProcessImage processImage = new BasicProcessImage(slaveId);
        /* 初始化寄存器数据范围 */
        processImage.setInvalidAddressValue(Short.MIN_VALUE);
        /* 初始化过程影像区各个数值为0 */
//        for (MrDevice mr:mrDevices){
//            if (StringUtils.isEmpty(mr.getRemark())){
//                continue;
//            }
//            String value = mr.getRemark();
//            String[] strings = mr.getRemark().split("\\.");
//            if (strings.length > 1) {
//                value = strings[0];
//            }
//            if (mr.getModality().equals("BA")) {
//                // 03
//                processImage.setHoldingRegister(Integer.parseInt(mr.getRegisterAddress()),  Short.parseShort(value));
//            } else {
//                if ("device输出".equals(mr.getProduct())){
//                    // 03
//                    processImage.setHoldingRegister(Integer.parseInt(mr.getRegisterAddress()),  Short.parseShort(value));
//                } else {
//                    // 02
//                    processImage.setInput(Integer.parseInt(mr.getRegisterAddress()),  Boolean.parseBoolean(mr.getRemark()));
//                }
//            }
//        }
        for (int i = 0; i < 608; i++) {
            // 03
            processImage.setHoldingRegister(i, (short) 0);
            // 02
            processImage.setInput(i,  false);
            // 01
            processImage.setCoil(i,  false);
            // 04
            processImage.setInputRegister(i,  (short) 0);
        }
        /* 为影像区添加监听 */
        processImage.addListener(new BasicProcessImageListener());
        return processImage;
    }
}
